import { http } from "@/utils/http";

// 问题相关接口
// 问题添加DTO
export interface QuestionAddDto {
  questionnaireId: number; // 问卷ID
  type: number; // 问题类型 1单选 2填空 3多选
  question: string; // 问题内容
  isRequired: number; // 是否必填 0否 1是
  sort?: number; // 问题序号（可选，前端控制）
}

// 问题更新DTO
export interface QuestionDto {
  questionnaireId: number; // 问卷ID
  type: number; // 问题类型：1-单选 2-填空 3-多选
  question: string; // 问题内容
  isRequired: number; // 是否必填
  sort: number; // 问题排序
}

// 问题详情VO
export interface QuestionDetailVo {
  questionId: number; // 问题ID
  questionnaireId: number; // 关联问卷ID
  type: number; // 问题类型
  question: string; // 问题内容
  sort: number; // 题号
  isRequired: number; // 是否必填
}

// 新增问题
export const addQuestion = (data: QuestionAddDto) => {
  return http.request<ApiResponse>("post", "/question/add", { data });
};

// 获取问题详情
export const getQuestionDetail = (questionId: number) => {
  return http.request<ApiResponse<QuestionDetailVo>>("get", "/question/detail", {
    params: { questionId }
  });
};

// 根据问卷ID查询问题列表
export const getQuestionsByQuestionnaireId = (questionnaireId: number) => {
  return http.request<ApiResponse<QuestionDetailVo[]>>("get", "/question/list-by-questionnaire", {
    params: { questionnaireId }
  });
};

// 更新问题
export const updateQuestion = (questionId: number, data: QuestionDto) => {
  return http.request<ApiResponse>("post", "/question/update", {
    params: { questionId },
    data
  });
};

// 删除问题
export const deleteQuestion = (questionId: number) => {
  return http.request<ApiResponse>("post", "/question/delete", {
    params: { questionId }
  });
};

// 问题选项接口
export interface QuestionOption {
  id?: number; // 选项ID
  questionId: number; // 问题ID
  content: string; // 选项内容
  sort?: number; // 排序
}

// 新增选项
export const addQuestionOption = (data: QuestionOption) => {
  return http.request<ApiResponse>("post", "/questionOption/add", { data });
};

// 删除选项
export const deleteQuestionOption = (optionId: number) => {
  return http.request<ApiResponse>("get", "/questionOption/delete", {
    params: { optionId }
  });
};

// 删除问题下的所有选项
export const deleteAllQuestionOptions = (questionId: number) => {
  return http.request<ApiResponse>("get", "/questionOption/deleteAll", {
    params: { questionId }
  });
};

// 更新选项
export const updateQuestionOption = (data: QuestionOption) => {
  return http.request<ApiResponse>("post", "/questionOption/update", { data });
};

// 获取问题下的所有选项
export const getAllQuestionOptions = (questionId: number) => {
  return http.request<ApiResponse<QuestionOption[]>>("get", "/questionOption/getAll", {
    params: { questionId }
  });
};

// 获取单个选项
export const getQuestionOption = (optionId: number) => {
  return http.request<ApiResponse<QuestionOption>>("get", "/questionOption/get", {
    params: { optionId }
  });
};

// 更新选项排序
export const updateQuestionOptionsSort = (questionId: number) => {
  return http.request<ApiResponse>("get", "/questionOption/updateSort", {
    params: { questionId }
  });
};

// 更新问题排序
export const updateQuestionSort = (questionnaireId: number) => {
  return http.request<ApiResponse>("get", "/question/updateQuestionSort", {
    params: { questionnaireId }
  });
};

// 通用响应接口
export interface ApiResponse<T = any> {
  code: number;
  data?: T;
  message: string;
}

// 分页响应接口
interface PageResponse<T> {
  total: number;
  list: T[];
}

// 问卷列表查询参数
export interface QuestionnaireQueryParams {
  page?: number;
  limit?: number;
  keyword?: string;
  cellId?: number;
}

// 问卷列表VO
export interface QuestionnaireSurveyListVo {
  id: number; // 主键ID
  cellId: number; // 小区ID
  cellName: string; // 小区名称
  questionnaireName: string; // 问卷名称
  questionnaireDescription: string; // 问卷描述
  participationScope: string; // 参与范围
  questionCount: number; // 问题数量
  publishTime: string | Date; // 发布时间
  endTime: string | Date; // 结束时间
  answerCount: number; // 答卷数量
  status: string; // 状态
}

// 分页查询问卷列表
export const getQuestionnaireList = (params?: QuestionnaireQueryParams) => {
  return http.request<ApiResponse<PageResponse<QuestionnaireSurveyListVo>>>('post', '/questionnaire/list', { 
    data: params 
  });
};

// 关键字搜索问卷
export const searchQuestionnaireByKeyword = (params: QuestionnaireQueryParams) => {
  return http.request<ApiResponse<PageResponse<QuestionnaireSurveyListVo>>>('post', '/questionnaire/findByKeyword', { 
    data: params 
  });
};

// 删除问卷 (POST方法，使用查询参数)
export const deleteQuestionnaire = (id: number | string) => {
  return http.request<ApiResponse>("post", `/questionnaire/delete?id=${id}`);
};

// 新增问卷参数接口
export interface QuestionnaireSurveyAddDto {
  cellId: number; // 小区ID
  questionnaireName: string; // 问卷名称
  questionnaireDescription?: string; // 问卷描述
  participationScope?: string; // 参与范围
  publishTime: Date | string; // 发布时间
  endTime: Date | string; // 结束时间
  tenantId?: number; // 租户ID
}

// 更新问卷参数接口
export interface QuestionnaireSurveyUpdateDto {
  id: number; // 问卷ID
  cellId: number; // 小区ID
  questionnaireName: string; // 问卷名称
  questionnaireDescription?: string; // 问卷描述
  participationScope?: string; // 参与范围
  publishTime: Date | string; // 发布时间
  endTime: Date | string; // 结束时间
}

// 新增问卷
export const addQuestionnaire = (data: QuestionnaireSurveyAddDto) => {
  return http.request<ApiResponse>("post", "/questionnaire/add", { data });
};

// 获取问卷详情
export const getQuestionnaireDetail = (id: number) => {
  return http.request<ApiResponse<QuestionnaireSurveyListVo>>("get", "/questionnaire/detail", {
    params: { id }
  });
};

// 更新问卷
export const updateQuestionnaire = (data: QuestionnaireSurveyUpdateDto) => {
  return http.request<ApiResponse>("put", "/questionnaire/update", { data });
};